package quanlydoanvao.themmoi;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

import javax.faces.model.SelectItem;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import dbutil.ConnectDB;

import quanlydoanra.themmoi.MucDich;
import quanlydoanra.utils.Utils;
import quanlydoanra.utils.truyXuatDatabase;

import utils.DateUtils;
import utils.UtilsOnScopes;

public class NguoiVao {
	private String stt;
	private int id;
	private String ten;
	private String soHC;
	private String cmnd;
	private String quocTich;
	private String ngheNghiep;
	private String hinhAnh;
	private java.util.Date ngayCapHC;
	private java.util.Date ngayHetHanHC;
	private java.util.Date ngayHetHanVisa;
	private String strNgayCapHC;
	private String strNgayHetHanVisa;
	private String strNgayHetHanHC;
	private String gioiTinh;
	private SelectItem[] listGioiTinh;
	private String error;
	private String maDoan;
	private List<NguoiVao> listTableNguoiVao;
	private boolean display = false;
	
	public boolean isDisplay() {
		return display;
	}
	public void setDisplay(boolean display) {
		this.display = display;
	}
	public java.util.Date getNgayHetHanHC() {
		return ngayHetHanHC;
	}
	public void setNgayHetHanHC(java.util.Date ngayHetHanHC) {
		this.ngayHetHanHC = ngayHetHanHC;
	}
	public String getError() {
		return error;
	}
	public void setError(String error) {
		this.error = error;
	}
	public NguoiVao() {
	}
	public NguoiVao(String stt, String ten, String soHC, String quocTich,
			String ngheNghiep, java.util.Date ngayCapHC, java.util.Date ngayHetHanVisa) {
		this.stt = stt;
		this.ten = ten;
		this.soHC = soHC;
		this.quocTich = quocTich;
		this.ngheNghiep = ngheNghiep;
		this.ngayCapHC = ngayCapHC;
		this.ngayHetHanVisa = ngayHetHanVisa;
	}
	public String getStt() {
		return stt;
	}
	public void setStt(String stt) {
		this.stt = stt;
	}
	public String getTen() {
		return ten;
	}
	public void setTen(String ten) {
		this.ten = ten;
	}
	public String getSoHC() {
		return soHC;
	}
	public void setSoHC(String soHC) {
		this.soHC = soHC;
	}
	public String getQuocTich() {
		return quocTich;
	}
	public void setQuocTich(String quocTich) {
		this.quocTich = quocTich;
	}
	public String getNgheNghiep() {
		return ngheNghiep;
	}
	public void setNgheNghiep(String ngheNghiep) {
		this.ngheNghiep = ngheNghiep;
	}
	public java.util.Date getNgayCapHC() {
		return ngayCapHC;
	}
	public void setNgayCapHC(java.util.Date ngayCapHC) {
		this.ngayCapHC = ngayCapHC;
	}
	public java.util.Date getNgayHetHanVisa() {
		return ngayHetHanVisa;
	}
	public void setNgayHetHanVisa(java.util.Date ngayHetHanVisa) {
		this.ngayHetHanVisa = ngayHetHanVisa;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getCmnd() {
		return cmnd;
	}
	public void setCmnd(String cmnd) {
		this.cmnd = cmnd;
	}
	public String getHinhAnh() {
		return hinhAnh;
	}
	public void setHinhAnh(String hinhAnh) {
		this.hinhAnh = hinhAnh;
	}
	
	public String getMaDoan() {
		HttpSession ses = UtilsOnScopes.getSession();		
		this.maDoan = (String)ses.getAttribute("maDoanVao");		
		return maDoan;
	}
	public void setMaDoan(String maDoan) {
		this.maDoan = maDoan;
	}
	
	public String getStrNgayCapHC() {
		return strNgayCapHC;
	}
	public void setStrNgayCapHC(String strNgayCapHC) {
		this.strNgayCapHC = strNgayCapHC;
	}
	public String getStrNgayHetHanVisa() {
		return strNgayHetHanVisa;
	}
	public void setStrNgayHetHanVisa(String strNgayHetHanVisa) {
		this.strNgayHetHanVisa = strNgayHetHanVisa;
	}
	
	public String getStrNgayHetHanHC() {
		return strNgayHetHanHC;
	}
	public void setStrNgayHetHanHC(String strNgayHetHanHC) {
		this.strNgayHetHanHC = strNgayHetHanHC;
	}
	public List<NguoiVao> getListTableNguoiVao() {		
		List<NguoiVao> list = new ArrayList<NguoiVao>();
		String mD =  this.getMaDoan();
		String SQL = "select * from dsnguoiden as DS where DS.iddoanvao ='"+mD+"' ORDER BY ten";
		ArrayList<HashMap<String, Object>> array = ConnectDB.getDataTypeList(SQL);
		if (array.size() > 0) {
			HashMap<String, Object> hash = new HashMap<String, Object>();
			int stt = 0;
			for (int i = 0; i < array.size(); i++) {
				stt = i + 1;
				hash = (HashMap<String, Object>) array.get(i);
				NguoiVao table = new NguoiVao();
				table.setStt(String.valueOf(stt));
				table.setId(Integer.parseInt(hash.get("id").toString()));
				table.setTen(hash.get("ten").toString());
				table.setSoHC(hash.get("sohc").toString());
				table.setCmnd(hash.get("cmnd").toString());
				table.setGioiTinh(hash.get("gioitinh").toString());
				table.setQuocTich(hash.get("quoctich").toString());
				table.setNgheNghiep(hash.get("nghenghiep").toString());
				table.setStrNgayCapHC(hash.get("ngaycaphc").toString());
				table.setStrNgayHetHanVisa(hash.get("ngayhethanvisa").toString());
				table.setStrNgayHetHanHC(hash.get("ngayhethanhc").toString());
				list.add(table);
			}
		}
		this.listTableNguoiVao = list;
		return this.listTableNguoiVao;
		
	}
	
	public void setListTableNguoiVao(List<NguoiVao> listTableNguoiVao) {
		this.listTableNguoiVao = listTableNguoiVao;
	}
	int status = 0;
	public boolean checkInputValue(){
		boolean result = false;
		String str;
		if(this.getMaDoan() == null){
			result = false;
			this.setError("Bạn phải tạo đoàn vào trước khi thêm thành viên");
		}
		else if(this.soHC == null || this.soHC.equals("") ||
				this.ten == null || this.ten.equals("") || 
				this.quocTich == null || this.quocTich.equals("") || 
				this.ngayCapHC == null || this.ngayCapHC.equals("")||
				this.ngayHetHanHC == null || this.ngayHetHanHC.equals("")||
				this.ngayHetHanVisa == null || this.ngayHetHanVisa.equals("")){
		result = false;
		this.setError("Nhập đầy đủ thông tin có dấu (*) phía trước");
		}
		else if(truyXuatDatabase.kiemTraThanhVienVao(this.cmnd,this.getMaDoan()) && status == 0){
			this.setError("Thành viên đã có trong danh sách người vào");
			result = false;
		}
		else if(truyXuatDatabase.kiemTraThanhVienCoDangTrongNuocKhong(this.cmnd,DateUtils.utilDateToSqlDate(this.ngayHetHanVisa),DateUtils.utilDateToSqlDate(truyXuatDatabase.getDate_Den_DotMoi_InDoanVao(maDoan))) && status == 0){
			this.setError("Thành viên này hiện đang trong nước");
			result = false;
		}
		else if(Utils.kiemTraNgay(this.ngayCapHC, this.ngayHetHanHC) == false){
			this.setError("Ngày cấp hộ chiếu phải trước ngày hết hạn hộ chiếu! ");
			result = false;
			
		}
		else if(Utils.kiemTraNgay(this.ngayHetHanVisa, this.ngayHetHanHC) == false){
			this.setError("Ngày hết hạn visa phải trước ngày ngày hết hạn hộ chiếu! ");
			result = false;
		}
		else if(Utils.kiemTraNgay(this.ngayCapHC, this.ngayHetHanVisa) == false){
			this.setError("Ngày cấp hộ chiếu phải trước ngày hết hạn visa! ");
			result = false;
		}
		else {
			this.setError("");
			result = true;
		}
		return result;
	}
	
	public String taoMoiNguoiVao(){
		status = 0;
		int i =0;
		try{
		if(this.checkInputValue()){
			String sql =  "insert into dsnguoiden(iddoanvao,ten,cmnd,sohc,quoctich,nghenghiep,ngaycaphc,ngayhethanhc,ngayhethanvisa,gioitinh) values('"+this.getMaDoan()+"','"+this.ten+"','"+this.cmnd+"','"+this.soHC+"','"+this.quocTich+"','"+this.ngheNghiep+"','"+DateUtils.utilDateToSqlDate(this.ngayCapHC)+"','"+DateUtils.utilDateToSqlDate(this.ngayHetHanHC)+"','"+DateUtils.utilDateToSqlDate(this.ngayHetHanVisa)+"','"+this.gioiTinh+"')";
			System.out.println("SQL "+sql);
			int acc = truyXuatDatabase.insertData(sql);
			if (acc == 1){//ko insert dc	
				error = "Thành viên được thêm vào danh sách người đến";
				i++;
				this.setId(truyXuatDatabase.getIDThanhVienDoanVao(this.getMaDoan(), soHC,this.cmnd));
				this.resetData();
				}
			else {			
				error ="Chưa thêm được cá nhân vào danh sách người đến ";
			
			}
			}
		else {
		
				}
			}
		catch(Exception ex){
			System.out.println("Loi");
		}
		return "finish_ThemNguoiVao";
	
	}
	 private void resetData() {
			// TODO Auto-generated method stub
		 this.setSoHC("");
		 this.setTen("");
		 this.setQuocTich("");
		 this.cmnd = "";
		 this.ngheNghiep = "";
		 this.ngayCapHC = null;
		 this.ngayHetHanHC = null;
		 this.ngayHetHanVisa = null;
		 this.gioiTinh = "Nam";
				
		}
	 public String hoanThanhThemMoi(){
			this.resetData();
			this.setError("");
			return "finish_themmoi_comebackhome";
	 }
	
	public String xoaNguoiVao(){
		HttpServletRequest request = UtilsOnScopes.getRequest();
		String id = request.getParameter("id");
		System.out.println("ID "+id);
		if(truyXuatDatabase.deleteNguoiVao(Integer.parseInt(id))){
		this.setError("Thành viên có mã "+id+ " đã bị xóa khỏi danh sách");
		}
		else {
		this.setError("Quá trình xóa bị lỗi");			
		}
		return "finish_ThemNguoiVao";
	}
	 
	
	public String loadThongTin(){
			HttpServletRequest request = UtilsOnScopes.getRequest();
			String id = request.getParameter("id");
			this.setDisplay(true);
			if(id == null){
			this.setError("Đang thêm mới thành viên. Không thể cập nhật");
			}
			else {
			String soHC = request.getParameter("soHC");
			String cmnd = request.getParameter("cmnd");
			String gioiTinh = request.getParameter("gioiTinh");
			String ten = request.getParameter("ten");
			String quocTich = request.getParameter("quocTich");
			String ngheNghiep = request.getParameter("ngheNghiep");
			String ngayCapHC = request.getParameter("ngayCapHC");
			String ngayHetHanHC = request.getParameter("ngayHetHanHC");
			String ngayHetHanVisa = request.getParameter("ngayHetHanVisa");
			this.setError("Đang sửa thành viên có mã số "+id+"...");
		
			this.setId(Integer.parseInt(id));
			this.setCmnd(cmnd);
			this.setSoHC(soHC);
			this.setTen(ten);
			this.setQuocTich(quocTich);
			this.setGioiTinh(gioiTinh);
			this.setNgheNghiep(ngheNghiep);
			this.setNgayCapHC(DateUtils.sqlDateToutilDate(java.sql.Date.valueOf(ngayCapHC)));
			this.setNgayHetHanHC(DateUtils.sqlDateToutilDate(java.sql.Date.valueOf(ngayHetHanHC)));
			this.setNgayHetHanVisa(DateUtils.sqlDateToutilDate(java.sql.Date.valueOf(ngayHetHanVisa)));
			}
			return "finish_ThemNguoiVao";
}
	public String capNhatThongTin(){	
		status = 1;
		if(this.checkInputValue()){
			if(truyXuatDatabase.updateNguoiVao(maDoan, id, ten, ngheNghiep, cmnd, soHC, ngayCapHC, ngayHetHanHC, ngayHetHanVisa)){
			this.setError("Thành viên có mã "+id+ " đã được cập nhật thành công");
			this.resetData();
			this.setDisplay(false);
			
			}
			else {
			this.setError("Quá trình cập nhật thông tin bị lỗi");
			this.setDisplay(true);
			}
			}			
		return "finish_ThemNguoiVao";
	}
	public String huyBoCapNhat(){
		this.setDisplay(false);
		this.resetData();
		this.setError("");
		if(this.getPhanBietThem_Sua() == 100){// them moi thanh vien
			return "finish_ThemNguoiVao";			
		}
		else return "finish_SuaNguoiVao";
		
	}
	
	public int getPhanBietThem_Sua(){
		HttpSession ses = UtilsOnScopes.getSession();
		int str = (Integer)ses.getAttribute("phanbiet");
		return str;
		
	}
	//******************* Sua thanh vien *****************
	public String getGioiTinh() {
		return gioiTinh;
	}
	public void setGioiTinh(String gioiTinh) {
		this.gioiTinh = gioiTinh;
	}
	public SelectItem[] getListGioiTinh() {
		SelectItem[] arrItem = new SelectItem[2];
		arrItem[0] = new SelectItem("Nam", "Nam");
		arrItem[1] = new SelectItem("Nữ", "Nữ");
		
		return arrItem;
	}
	public void setListGioiTinh(SelectItem[] listGioiTinh) {
		this.listGioiTinh = listGioiTinh;
	}
	public int getStatus() {
		return status;
	}
	public void setStatus(int status) {
		this.status = status;
	}
	
	
	

}
